package com.ljy.my_study.leetcode.子集;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lijunying
 * @date 2021/9/22 15:17
 */
public class TestMain {

//    给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。
//
//    解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
//
//             
//
//    示例 1：
//
//    输入：nums = [1,2,3]
//    输出：[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
//    示例 2：
//
//    输入：nums = [0]
//    输出：[[],[0]]
//             
//
//    提示：
//
//            1 <= nums.length <= 10
//            -10 <= nums[i] <= 10
//    nums 中的所有元素 互不相同
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/subsets
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        System.out.println(new TestMain().subsets(new int[]{1,2,3}));
    }

    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result=new ArrayList<>();
        int len=nums.length;
        List<Integer> list=new ArrayList<>();
        result.add(list);
        dfs(nums,0,list,result);
        return result;
    }

    private void dfs(int[] nums,int start,List<Integer> list,List<List<Integer>> result){
        int len=nums.length;
        if(start>=len){
            return;
        }
        for(int i=start;i<len;i++){
            list.add(nums[i]);
            List<Integer> newList=new ArrayList<>(list);
            result.add(newList);
            dfs(nums,i+1,list,result);
            list.remove(Integer.valueOf(nums[i]));
        }
    }
}
